+class RefundMaster : public CreatureScript
+{
+public:
+	RefundMaster() : CreatureScript("RefundMaster") { }
Add a comment to this line
+
+	bool OnGossipHello(Player* player, Creature* creature) override
+	{
+		WorldSession* session = player->GetSession();
+		bool found = false;
+		for (uint8 slot = EQUIPMENT_SLOT_START; slot < EQUIPMENT_SLOT_END; ++slot)
+		{
+			Item* newItem = player->GetItemByPos(INVENTORY_SLOT_BAG_0, slot);
+			if (newItem && newItem->GetTemplate()->DP > 0)
+			{
+				if (const char* slotName = sTransmogrification->GetSlotName(slot, session))
+				{
+					std::string icon = sTransmogrification->GetItemIcon(newItem->GetEntry(), 33, 33, -21, 0);
+					player->ADD_GOSSIP_ITEM(GOSSIP_ICON_DOT, icon + std::string(slotName), 1, slot);
+					found = true;
+				}
+			}
+		}
+		if (!found)
+		{
+			player->GetSession()->SendNotification("You do not have any items equipped that can be refunded.");
+			return true;
+		}
+		player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/Ability_Spy:35:35:-22:0|tNo thanks.", 11, 0);
+		player->SEND_GOSSIP_MENU(10, creature->GetGUID());
+
+		return true;
+	}
+
+	bool OnGossipSelect(Player* player, Creature* creature, uint32 sender, uint32 action) override
+	{
+		player->PlayerTalkClass->ClearMenus();
+
+		if (sender == 1)
+		{
+			if (Item* invItem = player->GetItemByPos(INVENTORY_SLOT_BAG_0, action))
+			{
+				char price[250];
+				player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/Ability_Paladin_BlessedHands:35:35:-22:0|tSelected item:", sender, action);
+				player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, sTransmogrification->GetItemIcon(invItem->GetEntry(), 25, 25, -22, 0) + sTransmogrification->GetItemName(invItem->GetEntry(), player->GetSession()).c_str(), sender, action);
+
+				snprintf(price, 250, "|TInterface/ICONS/Achievement_BG_returnXflags_def_WSG:35:35:-22:0|tCan be refunded for: |cffFF0000%u|r Donation Points", invItem->GetTemplate()->DP);
+				player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, price, sender, action);
+
+				player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "---------------------------------", sender, action);
+
+				player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/INV_Misc_Coin_02:35:35:-22:0|tCLICK TO REFUND.", 2, action);
+
+				player->ADD_GOSSIP_ITEM(GOSSIP_ICON_MONEY_BAG, "|TInterface/ICONS/Ability_Spy:25:25:-22:0|tBack..", 10, 0);
+				player->SEND_GOSSIP_MENU("Upgrading an item will let you keep the previous item, but also add a new version of it with extra stats. The first upgrade will add resilience to your item. All the upgrades you may have done on your previous item will not be transfered to your new item.", creature->GetGUID());
+				return true;
+			}
+			else
+			{
+				player->GetSession()->SendNotification("You do not have any items that can be refunded.");
+				player->PlayerTalkClass->SendCloseGossip();
+			}
+		}
+		else if (sender == 2)
+		{
+			if (Item* invItem = player->GetItemByPos(INVENTORY_SLOT_BAG_0, action))
+			{
+				player->DestroyItemCount(invItem->GetEntry(), 1, true);
+				LoginDatabase.PExecute("UPDATE fusionsite.account_data SET DP = DP + %u", invItem->GetTemplate()->DP);
+				player->GetSession()->SendNotification("You have been refunded %u Donation Points", invItem->GetTemplate()->DP);
+				player->PlayerTalkClass->SendCloseGossip();
+			}
+			else
+			{
+				player->GetSession()->SendNotification("You do not have any items that can be refunded.");
+				player->PlayerTalkClass->SendCloseGossip();
+			}
+		}
+		else if (sender == 10)
+			OnGossipHello(player, creature);
+		else if (sender == 11)
+			player->PlayerTalkClass->SendCloseGossip();
+
+		return true;
+	}
+};
+
+void AddSC_Refunder()
+{
+	new RefundMaster();
+}